package xs.szw.service.service;

import jakarta.validation.Valid;
import xs.szw.common.model.PageResult;
import xs.szw.service.model.dto.user.*;
import xs.szw.service.model.vo.UserInfoVo;
import xs.szw.service.model.vo.UserVo;
import xs.szw.service.model.pojo.security.UserAuthInfo;
import xs.szw.service.model.pojo.sys.User;
import com.baomidou.mybatisplus.extension.service.IService;

/**
* @author asus
* @description 针对表【sys_user(用户信息表)】的数据库操作Service
* @createDate 2025-02-10 18:35:53
*/
public interface UserService extends IService<User> {
    /**
     * 创建用户
     * @param userDto
     * @return
     */
    boolean createUser(UserDto userDto);

    /**
     * 修改用户
     * @param userDto
     * @return
     */
    boolean updateUser(UserUpdateDto userDto);

    /**
     * 删除单个用户信息及其相关表记录信息
     * @param id
     * @return
     */
    boolean deleteUserWithRelations(Long id);

    /**
     * 批量删除用户信息及其相关记录表信息
     * @param ids
     * @return
     */
    boolean deleteBatchUserWithRelation(String ids);

    /**
     * 查询单个用户
     * @param id
     * @return
     */
    UserVo getUser(Long id);

    /**
     * 分页查询用户列表
     * @param userPageDto
     * @return
     */
    PageResult<UserVo> getUserPage(UserPageDto userPageDto);

    /**
     * 获取当前登录用户的信息
     * @return
     */
    UserInfoVo getCurrentUserInfo();

    /**
     * 根据用户名获取认证信息
     *
     * @param username 用户名
     * @return {@link }
     */

    UserAuthInfo getUserAuthInfo(String username);

    /**
     * 修改密码
     * @param currUserId
     * @param passwordUpdateDto
     * @return
     */
    boolean updatePassword(Long currUserId, PasswordUpdateDto passwordUpdateDto);

    /**
     * 重置密码
     * @param userId
     * @param password
     * @return
     */
    boolean resetPassword(Long userId, String password);

    /**
     * 发送验证码(绑定或更换手机号)
     * @param mobile
     * @return
     */
    boolean senMobileCode(String mobile);


    /**
     * 绑定/更改手机号
     * @param mobileUpdateDto
     * @return
     */
    boolean bindMobileOrUpdateMobile(@Valid MobileUpdateDto mobileUpdateDto);

    /**
     * 发送邮箱验证码（绑定或更换邮箱）
     * @param email
     */
    void sendEmailCode(String email);
}
